import tkinter as tk
import tkinter.font as tkFont
import function as fc

def clear_focus(event):
    root.focus_set()  # 將焦點設到 root（主窗口）

# 创建主窗口
root = tk.Tk()

# 设置窗口标题
root.title("抓鬼工具箱")
# 设置窗口大小
root.geometry("420x750")

#设置字体类型
font16b = tkFont.Font(family="微软雅黑", size=16, weight="bold")
font14b = tkFont.Font(family="微软雅黑", size=14,weight="bold")
font12b=  tkFont.Font(family="微软雅黑", size=12,weight="bold")
font10b = tkFont.Font(family="微软雅黑", size=10,weight="bold")

# 固定每列最小宽度（像素）
root.grid_columnconfigure(0, minsize=80)   # 列0 宽 50px
root.grid_columnconfigure(1, minsize=100)  # 列1 宽 100px
root.grid_columnconfigure(2, minsize=100)   # 列2 宽 75px
root.grid_columnconfigure(3, minsize=140)  # 列3 宽 150px


# 创建第一个标签，设置居中并占满整行
label0 = tk.Label(root, text="抓鬼工具箱", font=font16b)
label0.grid(row=0, column=0, columnspan=4, pady=10) 

# 创建第一个按钮
label10 = tk.Label(root,bg="#007AFF", text="小鬼", fg="white",font=font12b)
label10.grid(row=1, column=0,columnspan=2, padx=5,pady=8,sticky="ew")  


# 创建第二个按钮
label11= tk.Label(root, text="大鬼", font=font12b)
label11.grid(row=1, column=2,columnspan=2, padx=5,pady=8)  # sticky="ew" 使按钮水平填满列


# 第三行：第一列放一个标签，后面放 4 行 3 列的单选框
label20 = tk.Label(root, text="地图",font=font12b )
label20.grid(row=2, column=0, sticky="w",padx=10)


# 创建一个列表保存单选框的内容
city_options = [
    ["江南野外", "大唐境外", "建邺城"],  # 第一行
    ["朱紫国", "傲来国", "宝象国"],  # 第二行
    ["西凉女国", "女儿村", "长寿村"],  # 第三行
    ["普陀山", "五庄观", ],  # 第四行
]

# 定义一个 StringVar 来绑定单选框
radio_value = tk.StringVar()
#radio_value.set("江南野外")

radio_buttons = []

#列表中選擇到的為藍色，未選擇的為黑色
def update_radio_colors():
    selected = radio_value.get()
    for radio in radio_buttons:
        if radio['value'] == selected:
            radio.config(fg='blue')
        else:
            radio.config(fg='black')


# 使用循环动态生成单选框
for row_index, row in enumerate(city_options):
    for col_index, option in enumerate(row):
        radio = tk.Radiobutton(root, text=option, variable=radio_value, value=option,font=font10b,command=update_radio_colors)
        radio.grid(row=row_index + 2, column=col_index + 1, padx=0, sticky="w")
        #將所有單選框放入一個列表中
        radio_buttons.append(radio)

# 預設選中第一個
radio_value.set(city_options[0][0])
update_radio_colors()


label60 = tk.Label(root, text="坐标",font=font12b )
label60.grid(row=6, column=0, sticky="w", padx=10, pady=5)

def on_focus_in(event):
    if entry61.get() == placeholder:
        entry61.delete(0, "end")  # 删除默认提示文字
        entry61.config(fg='black')

def on_focus_out(event):
    # 如果内容为空，恢复 placeholder
    if entry61.get() == '':
        entry61.insert(0, placeholder)
        entry61.config(fg='grey')

def on_enter(event):
    
    fc.dingwei(entry61,radio_value,label90)
        
placeholder="输入坐标，例如110.12回车键快速定位"
entry61 = tk.Entry(root,fg='gray',font=font10b)
entry61.insert(0, placeholder)
entry61.bind('<FocusIn>', on_focus_in)
entry61.bind('<FocusOut>', on_focus_out)
entry61.grid(row=6, column=1, columnspan=3, padx=10, pady=10,sticky="ew",ipady=3)
# 绑定回车键事件到 entry61（输入框）
entry61.bind('<Return>', on_enter)

label90 = tk.Label(root, text="")
label90.grid(row=9, column=0,rowspan=4, columnspan=4,sticky="nsew", padx=2, pady=2)

button70 = tk.Button(root, text="定 位",fg="white",bg="#1AAD19",font=font14b,
                     #这地方要使用lambda，不然就是
                     command=lambda:fc.dingwei(entry61,radio_value,label90))
                    
button70.grid(row=7, column=0, columnspan=4, sticky="ew", padx=5, pady=10,ipady=5)
button70.bind('<Return>', on_enter)  # 绑定回车键事件

label80 = tk.Label(root, text="提示：点击地图可以放大，电脑版微信使用更方便", anchor="center")
label80.grid(row=8, column=0, columnspan=4,sticky="w", padx=0, pady=5)


# 綁定點擊事件到整個主視窗
root.bind("<Button-1>", clear_focus)

# 為了避免點擊 Entry 自己也清除焦點，加入條件
def safe_clear_focus(event):
    widget = event.widget
    if widget != entry61:
        root.focus_set()

root.bind("<Button-1>", safe_clear_focus)


root.mainloop()
